;; elpa
(when (>= emacs-major-version 24)
  (require 'package)
  (add-to-list
   'package-archives
   '("melpa" . "http://melpa.org/packages/")
   t)
  (add-to-list 'package-archives
          '("popkit" . "https://elpa.popkit.org/packages/"))
  (package-initialize))

(add-to-list 'load-path (expand-file-name "~/.emacs.d/lisp"))


;; org-mode
;; 表格中文对齐
;; Setting English Font
(set-face-attribute
 'default nil :font "Consolas 11")
;; Chinese Font
(dolist (charset '(kana han symbol cjk-misc bopomofo))
(set-fontset-font (frame-parameter nil 'font)
charset
(font-spec :family "Microsoft Yahei" :size 16)))

;; 自动换行
(add-hook 'org-mode-hook (lambda () (setq truncate-lines nil)))

;; popup
(require 'popup)

;; auto-complete
(add-to-list 'load-path "~/.emacs.d/lisp/auto-complete")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/lisp/auto-complete/dict")
(ac-config-default)

;; company-mode
(add-to-list 'load-path "~/.emacs.d/lisp/company")
(autoload 'company-mode "company" nil t)

;; tabber
;; https://www.emacswiki.org/emacs/tabbar.el
(require 'tabbar)
(tabbar-mode 1)

;; json-mode
;; https://github.com/joshwnj/json-mode
(require 'json-mode)

;; markdown-mode
(autoload 'markdown-mode "markdown-mode"
   "Major mode for editing Markdown files" t)
(add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))

(autoload 'gfm-mode "gfm-mode"
   "Major mode for editing GitHub Flavored Markdown files" t)
(add-to-list 'auto-mode-alist '("README\\.md\\'" . gfm-mode))


;; magit
;; https://www.emacswiki.org/emacs/Magit
(add-to-list 'load-path "~/.emacs.d/lisp/magit/lisp")
;;(require 'magit)

(with-eval-after-load 'info
  (info-initialize)
  (add-to-list 'Info-directory-list
	       "~/.emacs.d/lisp/magit/Documentation/"))


;; 一些简单舒服的设置
;; 关闭烦人的出错时的提示声。
(setq visible-bell t)

;; 关闭起动时的那个“开机画面”。
;; (setq inhibit-startup-message t)

;; 显示列号。
(setq column-number-mode t) 

;; 不要在鼠标点击的那个地方插入剪贴板内容。我不喜欢那样，经常把我的文档搞的一团糟。我觉得先用光标定位，然后鼠标中键点击要好的多。不管你的光标在文档的那个位置，或是在 minibuffer，鼠标 中键一点击，X selection 的内容就被插入到那个位置。
(setq mouse-yank-at-point t)

;; 用一个很大的 kill ring. 这样防止我不小心删掉重要的东西。我很鲁莽的，你知道
(setq kill-ring-max 200)

;; 把 fill-column 设为 60. 这样的文字更好读。
(setq default-fill-column 60)

;; 不用 TAB 字符来indent, 这会引起很多奇怪的错误。编辑 Makefile 的时候也不用担心，因为 makefile-mode 会把 TAB 键设置成真正的 TAB 字符，并且加亮显示的。
(setq-default indent-tabs-mode nil)
(setq default-tab-width 8)
(setq tab-stop-list ())
(loop for x downfrom 40 to 1 do
      (setq tab-stop-list (cons (* x 4) tab-stop-list)))

;; 设置 sentence-end 可以识别中文标点。不用在 fill 时在句号后插入两个空格。
(setq sentence-end "\\([。！？]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*")
(setq sentence-end-double-space nil)

;; 可以递归的使用 minibuffer。我经常需要这么做。
(setq enable-recursive-minibuffers t)

;; 防止页面滚动时跳动， scroll-margin 3 可以在靠近屏幕边沿3行时就开始滚动，可以很好的看到上下文。
(setq scroll-margin 3
      scroll-conservatively 10000)

;; 把缺省的 major mode 设置为 text-mode, 而不是几乎什么功能也 没有的 fundamental-mode.
(setq default-major-mode 'text-mode)

;; 括号匹配时显示另外一边的括号，而不是烦人的跳到另一个括号。
(show-paren-mode t)
(setq show-paren-style 'parentheses)

;; 光标靠近鼠标指针时，让鼠标指针自动让开，别挡住视线。
(mouse-avoidance-mode 'animate)

;; 在标题栏显示buffer的名字，而不是 emacs@wangyin.com 这样没用 的提示。
(setq frame-title-format "emacs@%b")

;; 让 Emacs 可以直接打开和显示图片。
(auto-image-file-mode)

;; 进行语法加亮。
(global-font-lock-mode t)

;; 把这些缺省禁用的功能打开。
(put 'set-goal-column 'disabled nil)
(put 'narrow-to-region 'disabled nil)
(put 'upcase-region 'disabled nil)
(put 'downcase-region 'disabled nil)
(put 'LaTeX-hide-environment 'disabled nil)

;; 设置一下备份时的版本控制，这样更加安全。
(setq version-control t)
(setq kept-new-versions 3)
(setq delete-old-versions t)
(setq kept-old-versions 2)
(setq dired-kept-versions 1)

;; 一个简单的办法设置 auto-mode-alist, 免得写很多 add-to-list.
(mapcar
 (function (lambda (setting)
	     (setq auto-mode-alist
		   (cons setting auto-mode-alist))))
 '(("\\.xml$".  sgml-mode)
   ("\\\.bash" . sh-mode)
   ("\\.rdf$".  sgml-mode)
   ("\\.session" . emacs-lisp-mode)
   ("\\.l$" . c-mode)
   ("\\.css$" . css-mode)
   ("\\.cfm$" . html-mode)
   ("gnus" . emacs-lisp-mode)
   ("\\.idl$" . idl-mode)))

;; 设置有用的个人信息。这在很多地方有用。
(setq user-full-name "Guanyi Ning")
(setq user-mail-address "guanyi_ning@hansight.com")

;; 让 dired 可以递归的拷贝和删除目录。
(setq dired-recursive-copies 'top)
(setq dired-recursive-deletes 'top)


